#!/usr/bin/env node
import commander from 'commander';
import path from 'path';
import fs from 'fs-extra';
import prompt from 'prompts';
import { isFunction } from 'vtils';

import Generator from './lib/Generator';
import create from './lib/create';
import { getModules } from './utils';
import logger, { prefix } from './utils/logger';
import { ICommanderOpts } from './types';
const { version } = require('../package.json');

commander.version(version).option('-c --config [path]', '配置文件', 'yapi2ts.js');

commander.arguments('[cmd]').action(async (cmd: string | void, opts: ICommanderOpts) => {
  const configFile = path.join(process.cwd(), opts.config);

  switch (cmd) {
    case 'init':
      // 写入模板配置文件
      try {
        create(configFile);
      } catch (err) {
        logger.error(err);
      }
      break;
    case 'log':
      logger.log('该功能暂未支持');
      process.exit(0);
      break; //实际不需要break，因为退出了进程
    default:
      try {
        // 直接执行解析
        if (!(await fs.pathExists(configFile))) {
          logger.error(`配置文件不存在: ${configFile}`);
          const data = prompt({
            type: 'confirm',
            name: 'override',
            message: `${prefix} 是需要生成文件?`
          });
          const isOverride: boolean = (await data).override;

          if (isOverride) {
            await create(configFile);
          } else {
            logger.warn('请配置文件!');
            process.exit(0);
          }
        }
        const config = getModules(require(configFile));
        const ge = new Generator(isFunction(config) ? config() : config);
        ge.generate();
      } catch (error) {
        logger.error(error);
      }
      // 调用相关模块
      break;
  }
});

commander.parse(process.argv);
